// components/banner-swiper/banner-swiper.ts
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    // 轮播图数据列表
    bannerList: {
      type: Array,
      value: []
    },
    // 是否自动播放
    autoplay: {
      type: Boolean,
      value: true
    },
    // 自动播放间隔时间（毫秒）
    interval: {
      type: Number,
      value: 3000
    },
    // 是否循环播放
    loop: {
      type: Boolean,
      value: true
    },
    // 轮播图高度
    height: {
      type: String,
      value: '120px'
    },
    // 是否显示导航指示器
    navigation: {
      type: Boolean,
      value: true
    },
    // 配置键名，用于从基础配置中获取数据
    configKey: {
      type: String,
      value: ''
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    // 内部维护的轮播图数据
    internalBannerList: [] as (string | {value: string, ariaLabel: string, link_url?: string})[]
  },

  /**
   * 组件的方法列表
   */
  methods: {
    /**
     * 轮播图点击事件
     */
    onBannerTap(e: any) {
      const index = e.detail.index;
      const bannerItem = this.data.internalBannerList[index];
      
      console.log('轮播图点击:', { index, bannerItem });
      
      if (!bannerItem) {
        console.warn('轮播图数据异常');
        return;
      }
      
      // 如果是字符串类型（只有图片链接）
      if (typeof bannerItem === 'string') {
        console.log('预览图片:', bannerItem);
        this.previewImage(bannerItem);
      } 
      // 如果是对象类型（包含链接）
      else if (typeof bannerItem === 'object' && bannerItem.link_url) {
        console.log('跳转链接:', bannerItem.link_url);
        this.navigateToLink(bannerItem.link_url);
      }
      // 如果是对象类型但只有图片（没有链接）
      else if (typeof bannerItem === 'object' && bannerItem.value) {
        console.log('预览图片:', bannerItem.value);
        this.previewImage(bannerItem.value);
      }
    },

    /**
     * 预览图片
     */
    previewImage(imageUrl: string) {
      if (!imageUrl) {
        console.warn('图片链接为空');
        return;
      }
      
      wx.previewImage({
        urls: [imageUrl],
        current: imageUrl,
        fail: (error) => {
          console.error('预览图片失败:', error);
          wx.showToast({
            title: '图片预览失败',
            icon: 'none'
          });
        }
      });
    },

    /**
     * 导航到链接
     */
    navigateToLink(linkUrl: string) {
      if (!linkUrl) {
        console.warn('链接为空');
        return;
      }
      
      // 触发父组件的链接跳转事件
      this.triggerEvent('linkTap', { linkUrl });
    },

    /**
     * 格式化轮播图数据
     */
    formatBannerList(bannerList: any[]): (string | {value: string, ariaLabel: string, link_url?: string})[] {
      if (!Array.isArray(bannerList)) {
        return [];
      }
      
      return bannerList.map((item: any) => {
        if (typeof item === 'string') {
          // 如果是字符串，直接返回
          return item;
        } else if (typeof item === 'object' && item.pic_url) {
          // 如果是对象且有pic_url，转换为t-swiper需要的格式
          return {
            value: item.pic_url,
            ariaLabel: item.title || '轮播图',
            link_url: item.link_url || ''
          };
        }
        return item;
      });
    },

    /**
     * 加载轮播图数据
     */
    loadBannerData() {
      const { bannerList, configKey } = this.properties;
      
      console.log('轮播图组件加载数据:', { bannerList, configKey });
      
      // 如果直接传入了bannerList，使用传入的数据
      if (bannerList && bannerList.length > 0) {
        const formattedList = this.formatBannerList(bannerList);
        this.setData({
          internalBannerList: formattedList
        });
        console.log('使用传入的bannerList:', formattedList);
        return;
      }
      
      // 如果有配置键名，尝试从基础配置中获取
      if (configKey) {
        try {
          const util = require('../../utils/util').default;
          const configBannerList = util.getBasicConfig(configKey);
          
          console.log('从基础配置获取数据:', { configKey, configBannerList });
          
          if (configBannerList && Array.isArray(configBannerList)) {
            const formattedList = this.formatBannerList(configBannerList);
            this.setData({
              internalBannerList: formattedList
            });
            console.log('轮播图配置加载成功:', formattedList);
          } else {
            console.log('未找到轮播图配置，不显示轮播图:', configKey);
            this.setData({
              internalBannerList: []
            });
          }
        } catch (error) {
          console.error('加载轮播图配置失败:', error);
          this.setData({
            internalBannerList: []
          });
        }
      } else {
        console.log('没有配置键名，不显示轮播图');
        this.setData({
          internalBannerList: []
        });
      }
    }
  },

  /**
   * 组件生命周期
   */
  lifetimes: {
    attached() {
      this.loadBannerData();
    }
  },

  /**
   * 数据监听器
   */
  observers: {
    'bannerList': function(newVal) {
      this.loadBannerData();
    },
    'configKey': function(newVal) {
      this.loadBannerData();
    }
  }
});
